#include <stdio.h>
#include <stdlib.h>
int main()
{
    long lsize;//文件的大小
    char* buffer;//存放读取文件内容缓存区
    size_t result;//检验fread是否成功
    //打开文件
    FILE *fp = fopen("bite.txt","r");
    if(fp==NULL)
    {
        perror("fopen");
        return 1;
    }

    //获取文件大小
    fseek(fp,0,SEEK_END);
    //fseek指定文件指针的位置（使其可以在任意位置读取数据）
    //fseek（文件指针，相对于文件指针偏移量，文件指针指向：SEEK_SET（开头）||SEEK_CUR（文件指针当前位置）||SEEK_END（文件的末尾））
    lsize=ftell(fp);
    //ftell获取文件指针的当前位置，返回文件指针相对于文件开头的偏移量
    rewind(fp);
    //rewind将文件指针重置到文件开头
    
    //为存放读取的内容开辟空间
    buffer=(char*)malloc(sizeof(char)*lsize);
    if(buffer==NULL)
    {
        perror("malloc");
        return 1;
    }

    //拷贝文件内容到缓存区
    result=fread(buffer,1,lsize,fp);
    //fread读取文件中的内容
    //fread(存储读取文件内容的缓存区指针，每个元素的大小[字节]，要读取的元素个数，被读取文件的指针)
    //fread读取成功——返回读取元素的总个数
    if((long)result!=lsize)
    {
        //如果读取的元素个数与文件内容个数不一致：失败
        perror("fread");
        return 1;
    }

    //将buffer缓存区的内容写入到标准输出流中stdout
    size_t tmp = fwrite(buffer,sizeof(char),lsize,stdout);
    //fwrite将数据写入文件
    //fwrite(被写入数据的缓存区，每个元素的大小，要写入元素的数量，文件流指针：写入哪里)
    //成功返回写入元素的个数
    if((long)tmp!=lsize)
    {
        perror("fwrite");
        return 1;
    }
    //冲刷缓冲区，确保及时显示
    fflush(stdout);

    //关闭文件
    fclose(fp);
    free(buffer);
    return 0;
}
